package com.cloudlead.common.worker;

import java.util.Map;

import com.cloudlead.common.worker.action.Action;
import com.cloudlead.common.worker.desc.ActionDesc;
import com.cloudlead.common.worker.desc.ModuleDesc;
import com.cloudlead.common.lang.Module;
import com.cloudlead.common.lang.api.ActionRequest;
import com.cloudlead.common.lang.api.ActionResponse;

/**
 * API注册器
 *
 * @author dean.lu
 */
public interface ApiRegistry {
    /**
     * 所有的模块信息
     *
     * @return 模块相关信息
     */
    Map<String, ModuleDesc> getAllModuleDesc();

    /**
     * 所有的模块
     *
     * @return
     */
    Map<String, Module> getAllModule();

    /**
     * 所有的API
     *
     * @return API相关信息
     */
    Map<String, ActionDesc> getAllApiDesc();

    /**
     * 获取某个模块下的API信息
     *
     * @param module
     * @return
     */
    Map<String, ActionDesc> getApiDescs(String module);

    /**
     * 获取Api信息
     *
     * @param actionName 动作名称
     * @return API相关信息
     */
    ActionDesc getApiDesc(String actionName);

    /**
     * 根据动作名称查询动作
     *
     * @param actionName 动作名称
     * @return 动作对象
     */
    <Reqest extends ActionRequest, Response extends ActionResponse, A extends Action<Reqest, Response>> A get(String actionName);

    /**
     * 启用模块
     *
     * @param module
     */
    void enableModule(String module);

    /**
     * 禁用模块
     *
     * @param module
     */
    void disableModule(String module);
}
